THD thd_wiki https://thd.shoutwiki.com/wiki/%E0%B8%AB%E0%B8%99%E0%B9%89%E0%B8%B2%E0%B8%AB%E0%B8%A5%E0%B8%B1%E0%B8%81 MediaWiki 1.35.13 first-letter สื่อ พิเศษ พูดคุย ผู้ใช้ คุยกับผู้ใช้ THD คุยเรื่องTHD ไฟล์ คุยเรื่องไฟล์ มีเดียวิกิ คุยเรื่องมีเดียวิกิ แม่แบบ คุยเรื่องแม่แบบ วิธีใช้ คุยเรื่องวิธีใช้ หมวดหมู่ คุยเรื่องหมวดหมู่ มอดูล คุยเรื่องมอดูล Gadget Gadget talk Gadget definition Gadget definition talk Dictionary 0 21 68 62 2018-10-13T14:46:25Z ZilentFyld 30502172 68 wikitext text/x-wiki =={{lang|en}}== === การออกเสียง === อยู่ในระหว่างดำเนินการ === {{pos|en|n}} === {{pn}} {{en-noun|y}} # [[พจนานุกรม]] qolr3zfz1lftjii3kkwazo5al6vhlm4 หน้าหลัก 0 1 15 1 2018-07-30T08:52:27Z ZilentFyld 30502172 15 wikitext text/x-wiki hapi'nekoma ta wiki oficiru ga makagi ยินดีต้อนรับเข้าสู่วิกิทางการของมาคากิ fvckyeggr1iuot01czkd0rp9c58n2wh คุยกับผู้ใช้:ZilentFyld 3 2 2 2018-05-26T07:54:23Z ShoutWiki 11 2 wikitext text/x-wiki Hi ZilentFyld, thank you for choosing ShoutWiki to make your wiki. We would suggest that you start your wiki off by doing these few basic things: *Upload a logo. You can do this by uploading an image over [[:File:Wiki.png]]. (not available on some skins) *Design your [[Main Page]]. The main page is likely the first thing users will see. It should be attractive and catch the eye. *Start building content. All wikis need content to become the best they can be. If you need help with making a logo, skin or favicon, please see [[s:w:logocreation|ShoutWiki's Logo Creation Wiki]]. If you need any help with making your wiki, feel free to contact [[s:ShoutWiki Staff|ShoutWiki staff]] either via their talk pages or via [[Special:Contact]]. Alternatively, you can talk to us, or other users, via [[s:ShoutWiki Hub:IRC|IRC]]. Thank you again for using ShoutWiki. [[s:ShoutWiki Staff|ShoutWiki staff]] 07:53, 26 พฤษภาคม 2561 4lnhxapoawgu8e5tf8xj2mvyupzwnle มีเดียวิกิ:Common.css 8 23 76 75 2018-10-13T14:53:32Z ZilentFyld 30502172 76 css text/css /* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ทุกสกิน */ #การออกเสียง:before{ content:url('//upload.wikimedia.org/wikipedia/commons/thumb/2/23/Nuvola_apps_edu_languages.svg/30px-Nuvola_apps_edu_languages.svg.png');} #คำนาม:before, #คำกริยา:before{ content:url(//upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Open_book_01.svg/28px-Open_book_01.svg.png);} petlep1xvnvzrtc0ht68jyrwt2aiznl มีเดียวิกิ:Gadget-TabbedLang 8 17 57 2018-10-13T14:32:01Z ZilentFyld 30502172 ZilentFyld ย้ายหน้า [[มีเดียวิกิ:Gadget-TabbedLang]] ไปยัง [[มีเดียวิกิ:Gadget-TabbedLang.js]] 57 wikitext text/x-wiki #เปลี่ยนทาง [[มีเดียวิกิ:Gadget-TabbedLang.js]] l98949ntkav40ycc0blvj6aen67ngye มีเดียวิกิ:Gadget-TabbedLang.css 8 19 60 2018-10-13T14:33:32Z ZilentFyld 30502172 สร้างหน้าด้วย ".client-js .ns-0 #toc { border:0; background:#FFF; float:left; border-right:1px solid #CCC; margin:2px 8px 100% 2px; padding:0 2px 100% 0;..." 60 css text/css .client-js .ns-0 #toc { border:0; background:#FFF; float:left; border-right:1px solid #CCC; margin:2px 8px 100% 2px; padding:0 2px 100% 0; font-size: 100%; } .client-js .ns-0 #toc td { padding-top:0; } .client-js .ns-0 #toc ul { margin-top:-2px; } .client-js .ns-0 .toclevel-1 { margin-bottom:2px; } .client-js .ns-0 .toclevel-1 a { font-size:16px; color:#929292; display:block; border-left:1px solid #CCC; border-top:1px solid #CCC; border-bottom:1px solid #CCC; margin-bottom:-3px; margin-left:15px; margin-right:-5px; white-space:nowrap; background-color:#F6F6F6; padding:6px; } .client-js .ns-0 #toctitle,.client-js .ns-0 .tocnumber,.client-js .ns-0 #toc ul ul,.client-js .ns-0 #toc~h2,.client-js .ns-0 #toc~h2~h2~* { display:none; } .client-js .ns-0 #toc~h2+h3 { border-top: #CCC 1px solid; position: relative; left: -32px; padding-left: 32px; padding-top: 9px; top: 2px; } .client-js .ns-0 #toc ~ ol { position: relative; left: 40px; } .client-js .ns-0 #toc ~ ul { position: relative; left: 21px; } @media screen and (max-width:36em) { .client-js .ns-0 #toc { display:block; float:none; width:100%; border-right:0; margin:0; padding:0; } .client-js .ns-0 .toclevel-1 { display:block; float:left; margin-bottom:-3px; margin-left:-1px; margin-top:9px; } .client-js #toc a { margin-left:0; margin-right:5px; border-right:1px solid #CCC; } .client-js .ns-0 #toc ~ h2 + h3 { padding-left:0; left:2px; } .client-js .ns-0 #toc ~ ol,.client-js .ns-0 #toc ~ ul { left:11px; } } muwz1ygclfjxev65v0qzqvza7i869al มีเดียวิกิ:Gadget-TabbedLang.js 8 18 59 2018-10-13T14:33:13Z ZilentFyld 30502172 สร้างหน้าด้วย "(function ( $ ) { // This is copied form enwiktionary. // This is a (very) modified version of User:Atelaes/TabbedLanguages.js. // Tabbed languages with..." 59 javascript text/javascript (function ( $ ) { // This is copied form enwiktionary. // This is a (very) modified version of User:Atelaes/TabbedLanguages.js. // Tabbed languages with tabs on the side. // Tabs design by [[User:Jorm (WMF)]] /*jshint maxerr:1048576, strict:true, undef:true, latedef:true, es5:true */ /*global mw, jQuery, importScript, importScriptURI, $, ObjectStorage */ if (($.cookie('disable-tabbed-languages') !== null) || (location.search.indexOf("tabbedlanguages=off") !== -1)) return; if (!((mw.config.get('wgNamespaceNumber') === 0) || (mw.config.get('wgPageName') === "Wiktionary:Sandbox"))) return; var bodyContent = $(".mw-content-ltr .mw-parser-output")[0], // NOT #bodyContent languageLinks, ttr, languageButtons, caption, bodyContentFragment, complete = false, MO = window.MutationObserver || window.WebKitMutationObserver, observerStyleSheet; // Setting up the tabs has not yet been started. function makeTabsfromScratch() { // Set up the variables... window.tabbedLanguages = []; window.languageContainers = []; window.currentLanguageTab = 0; window.languageHeaderEditButtons = []; languageButtons = []; window.tabstable = newNode('table', {id: 'tabstable'}, newNode('tbody', ttr = newNode('tr', newNode('td', {'style': 'padding-top:0px;vertical-align:top;'}, newNode('table', {'style': 'margin-top: -2px;'}, languageLinks = newNode('tbody', {id: 'languageLinks'})))))); window.loadremovecatbuttons = false; bodyContentFragment = document.createDocumentFragment(); // If bodyContent is complete, do it all at once. // Otherwise, only start working, but don't attempt the whole thing. // Use catlinks+*, as gEBCN isn't always available. var catlinks = document.getElementById( "catlinks" ); if( bodyContent && catlinks && catlinks.nextSibling ) { allAtOnce(); } else { createObserver(); } } function allAtOnce() { var languageContainer, toc = document.getElementById( "toc" ); currentLanguageTab = 0; while ( bodyContent.firstChild ) { bodyContentFragment.appendChild( bodyContent.firstChild ); } try { for( var child = bodyContentFragment.firstChild; child && !isHeader( child ); ){ child = child.nextSibling; } for ( child = child && bodyContentFragment.insertBefore(tabstable, child).nextSibling; child && child.className !== 'printfooter' && child.className !== 'catlinks'; child = child.nextSibling ) { if ( isHeader( child ) ) { var langspan = child.getElementsByClassName('mw-headline')[ 0 ], language = langspan && ( langspan.innerText || langspan.textContent ); if ( language ) { newTab( tabbedLanguages.push(language) - 1, language ); processEditButton( child.getElementsByClassName('mw-editsection')[ 0 ] ); // should probably be set from a return value of above. languageContainer = languageContainers[ languageContainers.length - 1 ]; bodyContentFragment.removeChild( child ); child = tabstable; } } else { if ( child.nodeName !== "HR" ) { languageContainer.insertBefore(child, languageContainer.lastChild); } else { bodyContentFragment.removeChild(child); } child = tabstable; } } if( tabbedLanguages.length ) { if( toc ) { toc.parentNode.removeChild( toc ); } sortCats(); bodyContent.appendChild( bodyContentFragment ); setUpHashChange()(); if( location.hash === '' ) { location.replace( "#" + tabbedLanguages[ currentLanguageTab ] ); } complete = true; } else { bodyContent.appendChild( bodyContentFragment ); } } catch( e ) { window.console && console.error( e ); bodyContent.appendChild( bodyContentFragment ); complete || setUpHashChange()(); } } // Set up a MutationObserver to detect when new elements are loaded. function createObserver() { // If .ready happens early (or MO and animstart aren't supported), go ahead. if( $.isReady ) { return; // ??? How did we get $.isReady if bC or catlinks aren't loaded? } else { $( document ).ready( function () { if( tabbedLanguages.length === 0 ) { removeObserver(); if( !bodyContent ) { bodyContent = $(".mw-content-ltr")[0]; } if( bodyContent ) { allAtOnce(); } } }); } if( !document.getElementsByClassName ) { return; } if( !MO ) { var supportsAnimations = false; // Check if we can use animations as a fallback. If not, abort. // Basically yoinked from Modernizr. $.each( "animationName WebkitAnimationName MozAnimationName OAnimationName msAnimationName".split(" "), function(a, b){ // Do documentElements even always have .style? If not, this'll need fixing. if( document.documentElement.style[ b ] !== undefined ) { supportsAnimations = true; return false; } } ); if( supportsAnimations === false ) { return; } } var foundHeader = false, toc, recentChild, timer = false, // It's the setTimeout value, or false otherwise. recentHeader = -1, checkTab, tabFound = false, // If anyone on this project even considers making a random element // on a page have the class "visualClear"... visualClear = document.getElementsByClassName( "visualClear" ), languageContainer, observer; // TODO: Deal with the little jumping elements below the tabstable. // ...How? function elemFound() { if( timer === false ) { timer = setTimeout( function() { reactToObserver(); timer = false; }, 1); } } if( MO ) { observer = new MO( elemFound ); observer.observe( document, { childList: true, subtree: true } ); } else { // Fallback for browsers that don't support MO, but do support animations: // IE10, FF5-13, Chrome 17<, Safari 4-5.1, Opera 12-12.1 // Set up a stylesheet that uses animations/keyframes to allow // animationStart to see each time a new node loads onto the bodyContent. observerStyleSheet = document.getElementsByTagName( 'head' )[0].appendChild( document.createElement( "style" ) ); var oSSText = "@/@-moz-/@-webkit-/@-ms-/@-o-/".split("/") .join("keyframes nodeInserted{" + "from{outline-color:#fff;}" + "to{outline-color:#000;}" + "}\n") + ".mw-content-ltr>*,.mw-content-ltr+*,.visualClear{" + // TODO: Fix duplication here. "/-moz-/-webkit-/-ms-/-o-/".split("/").join("animation-duration:0.01s;") + "/-moz-/-webkit-/-ms-/-o-/".split("/").join("animation-name:nodeInserted;") + "}"; // Pretty much copied from mw.util. // Don't have time to wait until it would ordinarily load. if( observerStyleSheet.styleSheet ) { observerStyleSheet.styleSheet.cssText = oSSText; } else { observerStyleSheet.appendChild( document.createTextNode( oSSText ) ); } observerStyleSheet = observerStyleSheet.sheet || observerStyleSheet.styleSheet || observerStyleSheet; document.addEventListener('animationstart', elemFound, false); document.addEventListener('MSAnimationStart', elemFound, false); document.addEventListener('webkitAnimationStart', elemFound, false); } function reactToObserver() { if( complete ) { return; } // TODO: Surround main areas in try{} so that if it breaks, at least // the content gets dumped back into visibility. // First: What part are we up to? if( !foundHeader ) { // search for header or toc if( !recentChild ) { // Just starting, apparently. if( !bodyContent ) { bodyContent = $(".mw-content-ltr")[0]; if( !bodyContent ) { // bC hasn't loaded yet. Nothing to do here. return; } } // Check if we can do the whole thing in one go. if( visualClear.length ) { removeObserver(); allAtOnce(); return; } recentChild = bodyContent.firstChild; if( !recentChild ) { return; // Somehow got activated between bodyContent load // and bodyContent's content's load. } } for( ; !isHeader( recentChild ) && recentChild.nextSibling; ) { recentChild = recentChild.nextSibling; } if( isHeader( recentChild ) ) { // should simplify check. Maybe !recentChild.nextSibling? // We have our first header. foundHeader = true; checkTab = setUpHashChange(); // Default to the first tab. currentLanguageTab = 0; toc = document.getElementById('toc'); if ( toc ) { if ( toc.nextSibling ) { // And we have a usable ToC. Makes things much easier. // Analyze the ToC. We'll be using it to determine what // the tabs are going to be. $( ".toclevel-1 > a > .toctext" ).each( function() { var language = $( this ).text(); tabbedLanguages.push( language ); }); // Build all the tabs. $( tabbedLanguages ).each( newTab ); toc.parentNode.removeChild( toc ); // Afterwards, we'll check if the right section // is already available. } else { // Potential panic situation: Evil formatting places // ToC *after* the first header, so it's actually // *partly* loaded at this point, with no nextSibling. // (Alternatively, someone put it alone in a box.) CSS // builds it up as a huge tabbing block, but we can't // remove it here. Oy. // "Solution": // Temporarily hide the ToC until ready() fires, then // remove it. I'm not removing it right away, as I have // no idea what doom might occur if something like this // is removed while stuff is being loaded into it. toc.style.display = "none"; ( function ( toc ) { $( function() { if( toc.parentNode ) { toc.parentNode.removeChild( toc ); } }); })( toc ); toc = undefined; window.console && console.error( "TL notice: " + "Malformed entry. ToC either appears after " + "headers, or is placed in a box. Mind fixing " + "it or alerting me? Thanks. -- YR" ); } } languageContainer = languageContainers[ 0 ]; // Edit buttons. processEditButton( recentChild.getElementsByClassName( "mw-editsection" )[ 0 ] ); // Either way, start displaying the tabs right. bodyContent.insertBefore( tabstable, recentChild ); if( toc ) { tabFound = checkTab(); } } } if( foundHeader ) { // Note that there may or may not be a ToC available... // Should this be reworked so that the toc check is inside the loop? if( recentChild.nextSibling ) { // I hope I'm not going to regret leaving out a recentChild && condition here... for( var nextChild; recentChild.nextSibling; ) { nextChild = recentChild.nextSibling; if( isHeader( recentChild ) ) { var langspan = recentChild.getElementsByClassName('mw-headline')[ 0 ]; var editspan = recentChild.getElementsByClassName('mw-editsection')[ 0 ]; if( recentHeader >= 0 ) { languageContainer.insertBefore( bodyContentFragment, languageContainer.lastChild ); } recentHeader++; var language = ( language = langspan ).innerText || language.textContent; // Make sure it actually matches, when necessary. if( toc && language !== tabbedLanguages[ recentHeader ]) { // PANIC!!! // Okay, maybe don't panic. TL has encountered // a header that doesn't match the ToC's // description of the page. Possibilities // include an h1 on the page, a fake header // around somewhere, or some other malformed // kind of header. This really isn't supposed // to happen ever. // Response: Clear everything after this point, // and from there act as though the ToC never // existed. if( recentHeader > 0 ) { toggleLanguageTabs( tabbedLanguages[ 0 ] ); } else { currentLanguageTab = 0; } while( tabbedLanguages.length > recentHeader ) { tabbedLanguages.pop(); ttr.removeChild( languageContainers.pop() ); languageLinks.removeChild( languageButtons.pop().parentNode ); } toc = undefined; // Never. Existed. tabFound = false; window.console && console.error( "TL notice: " + "Malformed entry. ToC does not match " + "headers. Possibly a misplaced H1, fake " + "header, or header with incorrect " + "contents. Mind fixing it or " + "alerting me? Thanks. -- YR " ); } if( !toc ) { tabbedLanguages.push( language ); newTab( recentHeader, language ); } // Check to see if the target tab is found. // TODO: Need a better system of knowing when to check: // If it's found, stop checking. // Whether or not we have a ToC, checking can be necessary. // If we do have a ToC, but no hash, we don't check, right? // Put another way: // No hash? W/ ToC, don't check. W/o ToC, only check when new headers come in. // Hash? Depends. // W/ ToC: Technically, target could come in at any non-header element... ??? // W/o ToC: Could be whenever. Target header coming in is rather likely, in fact. Oy. // Either way: If the target, whether header or random element, is found, stop looking. // Does delaying the tab switch to a element target until full load matter? Not sure. // // Plan B: Regardless of ToC presence, only // check for potential target elems // at each new header, unless target is found. if( recentHeader > 0 && tabFound === false ) { tabFound = checkTab(); } languageContainer = languageContainers[ recentHeader ]; if( recentHeader > 0 ) { // I have too many of these checks... // Don't duplicate earlier pEB for first header. processEditButton( editspan ); } // All done. Clear. bodyContent.removeChild( recentChild ); } else { if( recentChild.nodeName === "HR" ) { // Kill unnecessary bars. bodyContent.removeChild( recentChild ); } else { // Regular content. Prepare for dumping into the // latest tab. bodyContentFragment.appendChild( recentChild ); } } recentChild = nextChild; } } /* // If we're all done, finish up. // How to tell? // Option one: Repeatedly check for nextSibling. // - Won't work. bodyContent doesn't always have a nS at the end. // - Currently in use only for dealing with the last elem. (Uses O2 as fallback.) // Option two: Set up getElemsByClassName, and poll for length. // - presumably visualClear. This would probably be pretty heavy. // - Currently in use. // Option three: Use $.ready. // - Potentially introduces substantial delay... // Option four: In the listener, check for classnames each time. // - Every time there's a new node? Lots of processing. // Option five: ... */ if( bodyContent.nextSibling && bodyContent.lastChild === recentChild ) { // are we done? ... // bodyContent.nextSibling doesn't always exist, but if it // does, get a head start on the stuff that can be done already. bodyContentFragment.appendChild( bodyContent.lastChild ); /* // Problem: recentChild is now inside the languageContainer, // and it's possible that reactToObserver will be called again // before the post-visualClear stuff runs. // Option one: recentChild = tabstable; // - Nope. That would mean bodyContent.lastChild = recentChild again // Option two: recentChild = false; // - Nope. The check at the top would cause us to start over again. // Blargh. This is an awful solution that probably violates every... */ recentChild = 1; // "1" is hereby the indicator that we're not doing anything with // this particular variable, okay? // I'll try to make this nicer later. } // Dump collected elems into most recent languageContainer. if( bodyContentFragment.firstChild ) { // Exact duplicate of above code. TODO: Fix. languageContainer.insertBefore( bodyContentFragment, languageContainer.lastChild ); } if( visualClear.length ) { complete = true; if( bodyContent.lastChild === recentChild ) { // bC.nS didn't exist. Move the last one left now. languageContainer.insertBefore( bodyContent.lastChild, languageContainer.lastChild ); } removeObserver(); sortCats(); if( tabFound !== true ) { checkTab(); if( location.hash === '' ) { location.replace( "#" + tabbedLanguages[currentLanguageTab] ); } } } } } function removeObserver() { if( observer ) { observer.disconnect(); } else if( observerStyleSheet ) { document.removeEventListener('animationstart', elemFound, false); document.removeEventListener('MSAnimationStart', elemFound, false); document.removeEventListener('webkitAnimationStart', elemFound, false); observerStyleSheet.disabled = true; } if( timer !== false ) { clearTimeout( timer ); } } } function isHeader( elem ) { return elem && elem.nodeName === "H2" && elem.getElementsByClassName( "mw-headline" ).length !== 0; } function newTab( index, language ) { var active = index === currentLanguageTab; var languageContainer = ttr.appendChild( newNode('td', { 'class': 'languageContainer', 'id': language + 'container' }, active ? undefined : { 'style' : 'display:none;' } )); languageContainers.push( languageContainer ); newCategoryBox( languageContainer, language ); // lB contains .(un)?selectedTab nodes languageButtons.push( languageLinks.appendChild( newNode('tr', newNode('td', { 'class': ( active ? '' : 'un' ) + 'selectedTab' }, newNode('a', language, { // Note: ' + language' makes this inconsistent with the ordinary links // themselves, which have the language name encoded. Issue? // Keep in mind that the parser itself actually corrects for this, // changing #!Xóõ links to the proper #.C7.83X.C3.B3.C3.B5 links. // Probably nothing to worry about. 'href': location.pathname + location.search + '#' + language }), ' '))).firstChild ); } function newCategoryBox( container, name ) { // Put a container in each for categories. return container.appendChild( newNode('div', name + ' categories: ', newNode('ul'), { 'class': 'catlinks', 'id': 'catlinks' })); } function processEditButton( button ) { if( button ) { // Yes, theoretically if you have some fake H2s the edit buttons will // be misplaced. Yet another TODO... var len = languageHeaderEditButtons.push( button ); if( len === 1 ) { caption = document.createElement('caption'); tabstable.insertBefore( caption, tabstable.firstChild ); } button.className += " editlangsection"; // use a argument or variable ( from .push? ) instead of .length? if( len - 1 === currentLanguageTab ) { caption.firstChild && caption.removeChild( caption.firstChild ); caption.appendChild( button ); } } } // Sets up the hash toggle system. // Returns the checkTab() function, which returns true if // we found whatever it was. function setUpHashChange() { // Important Note: The decodeURI mess is a real mess. // #.C7.83X.C3.B3.C3.B5 should go to tab "!Xóõ", with // the id "!Xóõcontainer" (no encoding). Urgh. // Also, "#Old_English" needs to go to decoded "Old English". // Remember to .substr( 1 ) before passing here. function decodeHash( hash ) { return decodeURI( hash .replace(/\.(?=[0-9A-F]{2})/g, '%') .replace(/_/g, ' ') ); } // Called by onhashchange. function hashToggleLT() { var destination = decodeHash( location.hash.substr(1) ); toggleLanguageTabs( destination ); tabbedLanguages[currentLanguageTab] !== destination && resetHash(); } // For updating page positioning. // Doesn't activate hashchange, at least in Chrome. Not sure about others. function resetHash() { location.replace( location.hash ); } // Need to decide if language arg is encoded or decoded. // Will work with either for the moment. Decoded works earlier. // Currently passed as decoded by every function but itself. // The hashes are encoded, but hashToggleLT decodes them. // Toggles to a different language tab. window.toggleLanguageTabs = function (language) { // Find the destination language. var destinationLanguageTab = $.inArray( language, tabbedLanguages ); if( destinationLanguageTab === -1 ) { var decoded = decodeHash( language ); if( decoded !== language ) { destinationLanguageTab = $.inArray( decoded, tabbedLanguages ); } } // Style the right toggle button, hide the old language section and show the new one. // var languageButtons = $("#languageLinks .selectedTab, #languageLinks .unselectedTab"); if (destinationLanguageTab !== -1 ) { if( destinationLanguageTab !== currentLanguageTab ) { languageButtons[currentLanguageTab].className = 'unselectedTab'; languageContainers[currentLanguageTab].style.display = 'none'; currentLanguageTab = destinationLanguageTab; languageButtons[destinationLanguageTab].className = 'selectedTab'; languageContainers[destinationLanguageTab].style.display = ''; if (caption) { // extra checks shouldn't be necessary... caption.firstChild && caption.removeChild(caption.firstChild); languageHeaderEditButtons[currentLanguageTab] && caption.appendChild(languageHeaderEditButtons[currentLanguageTab]); } } } else { // Does the hash match the id of a node in a tab? language = encodeURI( language.replace(/\ /g, '_') ); // Yes, I just possibly undid the decoding from hashToggleLT. // Worse, this might double-encode, breaking things. // Or maybe not? I think everything might be decoded before being // sent here? // I'll deal with it later. // Find the node, and go up the node tree until // you hit .languageContainer, or nothing. language = document.getElementById( language ); for( ; language && ( language = language.parentNode ) && language.className !== 'languageContainer'; ) ; // language = language && language.parentNode.parentNode; if ( language ) { // If someone maliciously makes a languageContainer with a // non-compliant ID, boom. toggleLanguageTabs( language.id.split('container')[0] ); } // Possible doom bug: Endless loop? } }; // This function gets returned as checkTab(), btw. // For during or immediately after load: Check if we have a // good "starting" tab. Return true if we have a definitive find. function checkTab() { // If there's a location hash, the window may have scrolled down before // we got a chance to reorganize everything. // If the destination was a subsection or sense id, switch to the right // tab, and rescroll. // If it was simply a language, switch to the appropriate tab, and // scroll back up. // If there's no hash at all, work off the TargetedTranslations prefs. try { var hash = ''; var destination = 'English'; if ( location.hash !== '' ) { hash = ( location.hash ).substr( 1 ); // does hash.substr always exist? destination = decodeHash( hash ); } // 'k, this is still awful. if ( $.inArray( destination, tabbedLanguages ) !== -1 ) { toggleLanguageTabs( destination ); window.scrollY && window.scroll(0, 0); return true; } else if ( hash !== '' && document.getElementById( hash ) ) { // This was going // to receive an area to search from an argument, but it turns // out that elem.getElementById doesn't actually exist. Meh. toggleLanguageTabs( destination ); resetHash(); // Scroll to the element. (Necessary since we // this isn't running through hashToggleLT, which normally does // it in these situations.) return true; } // No hash. Work from TargetedTranslations. if ('localStorage' in window) { if (tabbedLanguages[0] !== 'Translingual' && tabbedLanguages[0] !== 'English' && localStorage.TargetedTranslations) { for ( var tt_ = localStorage.TargetedTranslations.split("|"), tt = tt_[0].split(";").concat( $.grep( tt_[1].replace(/[^;\/]+\//g, '').split(";"), function (z) { return z && z !== "Latin" && z !== "Hebrew" && z !== "Arabic"; } ) ).concat( tt_[1].replace(/\/[^;]+/g, '').split(";") ), i = 0; i < tt.length; i++ ) { if ($.inArray(tt[i], tabbedLanguages) !== -1) { toggleLanguageTabs(tabbedLanguages[$.inArray(tt[i], tabbedLanguages)]); break; } } } } return false; } catch ( e ) { // This probably isn't all that unlikely to happen. Too complicated. :( window.console && console.error( "TL error: checkTab broke.", e ); } } if ("onhashchange" in window && (document.documentMode === undefined || document.documentMode > 7)) { window.onhashchange = hashToggleLT; } else { $( bodyContent ).on( 'click', 'a[href^="' + location.pathname + location.search + '#"], a[href^="#"]', function () { setTimeout( hashToggleLT, 10 ); } ); } return checkTab; } function sortCats() { var catDiv = document.getElementById('mw-normal-catlinks'), currentCatDiv; if (catDiv) { var cats = catDiv.getElementsByTagName('li'), catname, langcurrent = 0, catskip = 1; do { while (cats.length > 0) { catname = cats[ 0 ].getElementsByTagName('a')[0].innerHTML; if (catname.indexOf(tabbedLanguages[langcurrent + catskip]) === 0 && !/letter\snames$|script\scharacters$|mythology$/.test(catname) ) { langcurrent += catskip; catskip = 1; } currentCatDiv = languageContainers[langcurrent].lastChild; currentCatDiv.lastChild.appendChild(cats[0]); } if (langcurrent + 1 < languageContainers.length - catskip) { // Didn't make it to the end, which means there's a section // without any categories. Dump what's left back and try again. while (currentCatDiv.lastChild.firstChild) { catDiv.lastChild.appendChild(currentCatDiv.lastChild.firstChild); } catskip++; } else { break; } } while (true); } if( currentCatDiv ) { // place patrol link at the bottom of the page var pl = currentCatDiv.previousSibling; // languageContainer.lastChild.previousSibling; // Got it, the patrollink is sometimes the lagging last elem. if( pl && pl.className === "patrollink" ) { tabstable.parentNode.appendChild(pl); } } /* // category editing buttons if (mw.config.get('wgAction') === "view" && !/&printable=yes|&diff=|&oldid=/.test(location.search)) { for (z = 0; z < languageContainers.length; z++) { // TODO: import // addTabbedLanguageNewCatButton(z); } if ( window.loadremovecatbuttons === true ) { $.get( mw.config.get( 'wgScript' ), { 'title' : mw.config.get('wgPageName'), 'action' : 'raw' }, // Note that this isn't actually defined. I'm considering not // actually importing the function, and just dumping this section. addRemoveCatButtons ); } } */ // Remove old cat box, allow display of hidden cats box. if (catDiv && !(catDiv.nextSibling && catDiv.nextSibling.className === "mw-hidden-catlinks mw-hidden-cats-user-shown")) { catDiv.parentNode.style.display = 'none'; } else { if (catDiv) { catDiv.style.display = 'none'; } } } function testStuff() { var delay = 5000, f = document.createDocumentFragment(); var x = [ function () { // $("#toc").remove(); var x = document.getElementById( "mw-content-text" ); while( x.nextSibling ) { f.appendChild( x.nextSibling ); } }, function () { var y = $( ".mw-content-ltr" )[ 0 ]; var q = document.createDocumentFragment(); while( y.firstChild ) { q.appendChild( y.firstChild ); } function u( i, e ) { setTimeout( function () { y.appendChild( q.firstChild ); }, i / e * delay ); } for( var i = 0, e = q.childNodes.length; i < e; i++ ) { u( i, e ); // encapsulate } makeTabsfromScratch(); }, function () { function u( i, e ) { setTimeout( function () { $(".mw-content-ltr").after( f.firstChild ); }, i / e * delay / 5 ); } for( var i = 0, e = f.childNodes.length; i < e; i++ ) { u( i, e ); // encapsulate } console.log(9); } ]; x[0](); for( var i = 1; i < x.length; i++ ) { setTimeout( x[ i ], (i-1) * delay + 50 ); } } //testStuff(); makeTabsfromScratch(); // This is officially deprecated as of MW1.22. Should be replaced by mw.hook, // but the docs don't say what event, so... $(mw).on('LivePreviewDone', function () { bodyContent = $(".mw-content-ltr")[0]; // reset makeTabsfromScratch(); }); })( window.jQuery ); 6un8dvxd9hucllh03aojq9wmde5mvrb มีเดียวิกิ:Gadget-definition 8 22 64 2018-10-13T14:36:49Z ZilentFyld 30502172 ZilentFyld ย้ายหน้า [[มีเดียวิกิ:Gadget-definition]] ไปยัง [[มีเดียวิกิ:Gadgets-definition]] 64 wikitext text/x-wiki #เปลี่ยนทาง [[มีเดียวิกิ:Gadgets-definition]] i98eaj7ihlcmqktynz1qrfimiw7618t มีเดียวิกิ:Gadgets-definition 8 20 67 66 2018-10-13T14:40:07Z ZilentFyld 30502172 67 wikitext text/x-wiki == รูปแบบที่แสดง == * TabbedLanguages[ResourceLoader|top|dependencies=jquery.cookie,mediawiki.util,ext.gadget.LegacyScriptsNewNode|type=general]|TabbedLang.js|TabbedLang.css o8syr6lg6ly8j9ecmod5mrwxrbdfba9 แม่แบบ:En-noun 10 13 53 48 2018-10-13T14:27:31Z ZilentFyld 30502172 53 wikitext text/x-wiki {{right-table-top}} {| class="wikitable decltable" ! เอกพจน์ !! พหูพจน์ |- | '''{{pn-nonblack|{{{2|}}}}}''' || '''[[{{#if:{{{1|}}}|{{#switch:{{{1}}}|s={{pn-nonblack|{{{2|}}}}}s|es={{pn-nonblack|{{{2|}}}}}es|y={{#sub:{{pn-nonblack|{{{2|}}}}}|0|-1}}ies}}|{{pn-nonblack|{{{2|}}}}}s}}]]''' |} {{right-table-bottom}} 0aiv0e4j7o1m6ny20ne79svolwnn3di แม่แบบ:En-noun-pl 10 14 52 51 2018-10-13T14:26:21Z ZilentFyld 30502172 52 wikitext text/x-wiki {{right-table-top}} {| class="wikitable decltable" ! เอกพจน์ !! พหูพจน์ |- | '''[[{{#if:{{{1|}}}|{{#switch:{{{1}}}|s={{#sub:{{pn-nonblack|{{{2|}}}}}|0|-1}}|#default={{{1}}}|es={{#sub:{{pn-nonblack|{{{2|}}}}}|0|-2}}|y={{#sub:{{pn-nonblack|{{{2|}}}}}|0|-3}}y}}|{{#sub:{{pn-nonblack|{{{2|}}}}}|0|-1}}}}]]''' || '''{{pn-nonblack|{{{2|}}}}}''' |} {{right-table-bottom}} logw6jjidxydrl2g4um28zwqw26npr9 แม่แบบ:Lang 10 9 39 2018-10-13T13:58:59Z ZilentFyld 30502172 เปลี่ยนทางหน้าไปยัง [[แม่แบบ:ภาษา]] 39 wikitext text/x-wiki #REDIRECT [[แม่แบบ:ภาษา]] fobht1k44r2829vyzn5nlmyf9rzq1s6 แม่แบบ:Lang-en 10 10 40 2018-10-13T13:59:42Z ZilentFyld 30502172 สร้างหน้าด้วย "ภาษาอังกฤษ" 40 wikitext text/x-wiki ภาษาอังกฤษ cy9uguy5stpgzp5km6c5gkxlcowsdl2 แม่แบบ:Pn 10 4 34 32 2018-10-13T12:40:20Z ZilentFyld 30502172 34 wikitext text/x-wiki '''{{#if:{{{1|}}}|{{#ifeq:{{{1|}}}|1|{{PAGENAME}}|{{{1}}}}}|{{#invoke:Pn|lower}}}}''' ed8gj24zqhjo880k4cuvp08m13souyt แม่แบบ:Pn-nonblack 10 15 49 2018-10-13T14:23:25Z ZilentFyld 30502172 สร้างหน้าด้วย "{{#if:{{{1|}}}|{{#ifeq:{{{1|}}}|1|{{PAGENAME}}|{{{1}}}}}|{{#invoke:Pn|lower}}}}" 49 wikitext text/x-wiki {{#if:{{{1|}}}|{{#ifeq:{{{1|}}}|1|{{PAGENAME}}|{{{1}}}}}|{{#invoke:Pn|lower}}}} 1hrlwm9zaljdf9nujn1qjso7pl7k09t แม่แบบ:Pos 10 7 37 2018-10-13T13:57:28Z ZilentFyld 30502172 เปลี่ยนทางหน้าไปยัง [[แม่แบบ:วจี]] 37 wikitext text/x-wiki #REDIRECT [[แม่แบบ:วจี]] 5mawdi7j8u99e4535nxto44id6tznjv แม่แบบ:Right-table-bottom 10 12 45 2018-10-13T14:03:32Z ZilentFyld 30502172 สร้างหน้าด้วย "</div>" 45 wikitext text/x-wiki </div> 2568t9pwnrdu7nojkgqsf497qhewjep แม่แบบ:Right-table-top 10 11 81 80 2018-10-13T15:02:18Z ZilentFyld 30502172 81 wikitext text/x-wiki <div style="position:relative;top:-3em;right:0px;float:right;margin-bottom:-3em"> t8ut0ao306y3jl044zp7ofv969ftrcz แม่แบบ:ภาษา 10 8 42 38 2018-10-13T14:00:41Z ZilentFyld 30502172 42 wikitext text/x-wiki {{lang-{{{1|}}}}}<includeonly>[[category:{{lang-{{{1|}}}}}]]</includeonly> 9c4pjpf1ca56f79m315w9e4embo7fe1 แม่แบบ:วจี 10 6 43 41 2018-10-13T14:01:08Z ZilentFyld 30502172 43 wikitext text/x-wiki {{วจี/ย่อวจี|{{{2|}}}}}<includeonly>[[category:{{วจี/ย่อวจี|{{{2|}}}}}{{lang-{{{1|}}}}}]]</includeonly><noinclude>[[category:แม่แบบหลัก]]</noinclude> ivnvoqsxqiq9u5qyibpe1xh13abktcf แม่แบบ:วจี/ย่อวจี 10 5 33 2018-10-12T12:08:35Z ZilentFyld 30502172 สร้างหน้าด้วย "{{#switch:{{{1|}}}|n=คำนาม|#default={{#if:{{{1|}}}|{{{1}}}|ไม่ระบุวจีวิภาค}}}}" 33 wikitext text/x-wiki {{#switch:{{{1|}}}|n=คำนาม|#default={{#if:{{{1|}}}|{{{1}}}|ไม่ระบุวจีวิภาค}}}} 2y2yu1tomn1tuo3dlobd076uu61uvov มอดูล:Pn 828 3 31 30 2018-10-12T11:55:30Z ZilentFyld 30502172 31 Scribunto text/plain local export = {} function export.lower() local title = mw.title.getCurrentTitle().text a = string.sub(title, 1, 1) b = string.sub(title, 2) lowercase = a:lower() return lowercase .. b end return export s5t8z521yjfno4em0fdbha0tg6of0cj